package com.njbw.design_pattern.created.singleton;

import java.util.concurrent.atomic.AtomicLong;

/**
 * 全局计数器
 * 枚举类型本身就是线程安全的，并且在 Java 中，枚举类型的实例是由 Java 虚拟机在类加载时创建的，确保了全局唯一性。
 * <p/>
 * 这种方式不仅简洁明了，而且还防止了通过反射和序列化创建多个实例的问题，从而提供了更强的单例保证。
 * <p/>
 * 适用场景：需要简单且强单例保证的场景。
 * <p/>
 * 这种方式是最推荐的单例模式实现方式，因为它既简洁明了，又能确保线程安全，同时防止了反射和序列化带来的问题。
 * @author huang hou chun
 * @since JDK 1.8 <br>
 */
public enum GlobalCounterEnum {

    INSTANCE;

    private AtomicLong atomicLong = new AtomicLong(0);

    public long getNumber() {
        return atomicLong.incrementAndGet();
    }
}
